package com.frame.hander;

import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONObject;

import com.jfinal.core.Controller;

/**
 * @author LRC
 * @createDate 2015年5月19日
 * @description 查询参数处理类
 */
public class SearchParamHander {
	
	/**
	 * 从给定参数集合中中找出需要列填充到相应的SQL查询参数中
	 * @param paramNames SQL参数名
	 * @param params 给定的参数集合
	 * @param sql sql语句
	 * @param searchVals 返回界面的查询参数值
	 * @return
	 */
	public static List<Object> getSQLParams(String[] paramNames,Controller c,StringBuilder sql,
			JSONObject searchVals){
		List<Object> paramVals = new ArrayList<Object>();
		String pName = null;//SQL字段名
		String type = null;//SQL字段类型
		String express = null;//表达式
		String param = null;//页面参数名
		String arg = null;
		for(String nameC : paramNames){
			String[] name = nameC.split(":");
			pName = name[0];
			type = name[1];
			express = name[2];
			if(name.length==3){
				param = name[0];
			}else{
				param = name[3];
			}
			Object obj = c.getPara(param);
			if(obj!=null&&!"".equals(obj.toString().trim())){
				arg = " ? ";
				//填充返回查询参数
				if(searchVals!=null){
					searchVals.put(param, obj);
				}
				//填充SQL查询参数
				if("like".equals(express)){
					obj = ValueHander.parseVal(obj, type);
					paramVals.add("%"+obj+"%");
				}else if("in".equals(express)){
					String args = ValueHander.getInArg(obj, type);
					if(args!=null){
						arg = args;
					}
				}else{
					obj = ValueHander.parseVal(obj, type);
					paramVals.add(obj);
				}
				//拼接SQL
				sql.append(" and "+pName+" " +express+ arg);
			}
		}
		//测试输出
		System.out.println(sql.toString());
		
		return paramVals;
	}
	
	/**
	 * 从给定参数集合中中找出需要列填充到相应的SQL查询参数中
	 * @param paramNames SQL参数名
	 * @param params 给定的参数集合
	 * @param sql sql语句
	 * @param searchVals 返回界面的查询参数值
	 * @return
	 */
	public static List<Object> getSQLParams(String[] paramNames,com.alibaba.fastjson.JSONObject c,List<String> filters,
			JSONObject searchVals){
		List<Object> paramVals = new ArrayList<Object>();
		String pName = null;//SQL字段名
		String type = null;//SQL字段类型
		String express = null;//表达式
		String param = null;//页面参数名
		String arg = null;
		for(String nameC : paramNames){
			String[] name = nameC.split(":");
			pName = name[0];
			type = name[1];
			express = name[2];
			if(name.length==3){
				param = name[0];
			}else{
				param = name[3];
			}
			Object obj = c.get(param);
			System.out.println(nameC);
			if(obj!=null&&!"".equals(obj.toString().trim())){
				arg = " ? ";
				//填充返回查询参数
				if(searchVals!=null){
					searchVals.put(param, obj);
				}
				//填充SQL查询参数
				if("like".equals(express)){
					obj = ValueHander.parseVal(obj, type);
					paramVals.add("%"+obj+"%");
				}else if("in".equals(express)){
					String args = ValueHander.getInArg(obj, type);
					if(args!=null){
						arg = args;
					}
				}else{
					obj = ValueHander.parseVal(obj, type);
					paramVals.add(obj);
				}
				//拼接SQL
				filters.add(pName+" " +express+" "+ arg);
			}
		}
		
		//测试输出
		System.out.println(filters);
		
		return paramVals;
	}
}
